// filename: frontend/src/utils/download.js

import { request } from "@/utils/request"; // 【核心修改1】导入 request

function triggerBrowserDownload(blob, filename) {
  const url = window.URL.createObjectURL(blob);
  const a = document.createElement("a");
  a.style.display = "none";
  a.href = url;
  a.download = filename;
  document.body.appendChild(a);
  a.click();
  window.URL.revokeObjectURL(url);
  document.body.removeChild(a);
}

export async function downloadSongs(songIds) {
  if (!songIds || songIds.length === 0) {
    uni.showToast({ title: "没有可下载的歌曲", icon: "none" });
    return;
  }

  const BatchSize = 20;
  const totalBatches = Math.ceil(songIds.length / BatchSize);

  if (totalBatches > 1) {
    const res = await uni.showModal({
      title: "批量下载提示",
      content: `您将下载 ${songIds.length} 首歌曲，将分 ${totalBatches} 个压缩包进行下载。是否继续？`,
    });
    if (!res.confirm) {
      return;
    }
  }

  uni.showLoading({ title: `准备下载 (0/${totalBatches})` });

  for (let i = 0; i < totalBatches; i++) {
    const start = i * BatchSize;
    const end = start + BatchSize;
    const batchIds = songIds.slice(start, end);

    uni.showLoading({ title: `正在下载第 ${i + 1}/${totalBatches} 个包...` });

    try {
      // 【核心修改2】使用新的 request 工具发起请求
      // 注意：由于 request 工具默认返回 JSON，但这里我们需要 ArrayBuffer，
      // 我们需要修改 request 工具来支持 responseType。
      // （下一步我们将修改 request.js 来支持这一点）
      const data = await request({
        url: `/api/download/songs`,
        method: "POST",
        header: { "Content-Type": "application/json" },
        data: { song_ids: batchIds },
        responseType: "arraybuffer", // 传递 responseType
      });

      const blob = new Blob([data], { type: "application/zip" });
      const filename = `albert_music_batch_${i + 1}.zip`;
      triggerBrowserDownload(blob, filename);

    } catch (error) {
      uni.hideLoading();
      // error 对象现在可能是 uni.request 的完整失败对象
      const errorMsg = error?.data?.error || `第 ${i + 1} 个包下载失败`;
      uni.showToast({ title: errorMsg, icon: "error" });
      return;
    }
  }

  uni.hideLoading();
  uni.showToast({ title: "所有批次下载已发起", icon: "success" });
}